home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / qblib10.arc / QUICKBAS.DOC < prev    next >
Text File  |  1987-09-22  |  43KB  |  1,981 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.                                                 QUICKBAS.LIB -- Version 1.0
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.                                                          September 22, 1987
  31.  
  32.  
  33.  
  34.  
  35.  
  36.                                                              Harold Thomson
  37.  
  38.                                                          7437 Burnway Drive
  39.                                                         Orlando, Fl.  32819
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.      TABLE OF CONTENTS
  71.  
  72.  
  73.  
  74.  
  75.  
  76.      Introduction  . . . . . . . . . . . . . . . . . . . . . . . . . . .  1
  77.  
  78.      Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . . . .  2
  79.  
  80.      Global Variables  . . . . . . . . . . . . . . . . . . . . . . . . .  3
  81.        QINIT   . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  3
  82.  
  83.      Keyboard  . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4
  84.        QINPUT  . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4
  85.        QMENU   . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  6
  86.  
  87.      String  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  8
  88.        LOWER   . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  8
  89.        QEXTRACT  . . . . . . . . . . . . . . . . . . . . . . . . . . . .  8
  90.        QWORD   . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  8
  91.        QWORDS  . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  9
  92.        UPPER   . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  9
  93.  
  94.      Video   . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   10
  95.        QATTR   . . . . . . . . . . . . . . . . . . . . . . . . . . . .   10
  96.        QPRTN  QPRTA  QPRTH  QPRTE  . . . . . . . . . . . . . . . . . .   10
  97.        QMPRTN  QMPRTA  QMPRTH  QMPRTE  . . . . . . . . . . . . . . . .   11
  98.        QSCROLL   . . . . . . . . . . . . . . . . . . . . . . . . . . .   12
  99.        QSCROLLB  . . . . . . . . . . . . . . . . . . . . . . . . . . .   12
  100.        QSCRREST  . . . . . . . . . . . . . . . . . . . . . . . . . . .   13
  101.        QSCRSAVE  . . . . . . . . . . . . . . . . . . . . . . . . . . .   13
  102.        QWINDOW   . . . . . . . . . . . . . . . . . . . . . . . . . . .   14
  103.        QWINDOWH  . . . . . . . . . . . . . . . . . . . . . . . . . . .   15
  104.        QWINDOWV  . . . . . . . . . . . . . . . . . . . . . . . . . . .   16
  105.        VIDREST   . . . . . . . . . . . . . . . . . . . . . . . . . . .   17
  106.        VIDSAVE   . . . . . . . . . . . . . . . . . . . . . . . . . . .   17
  107.  
  108.      Disk  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   18
  109.        QGETDRV   . . . . . . . . . . . . . . . . . . . . . . . . . . .   18
  110.        QSETDRV   . . . . . . . . . . . . . . . . . . . . . . . . . . .   18
  111.  
  112.      Sub-Directory   . . . . . . . . . . . . . . . . . . . . . . . . .   19
  113.        QCHDIR  . . . . . . . . . . . . . . . . . . . . . . . . . . . .   19
  114.        QCHKDIR   . . . . . . . . . . . . . . . . . . . . . . . . . . .   19
  115.        QGETDIR   . . . . . . . . . . . . . . . . . . . . . . . . . . .   20
  116.        QMKDIR  . . . . . . . . . . . . . . . . . . . . . . . . . . . .   20
  117.        QRMDIR  . . . . . . . . . . . . . . . . . . . . . . . . . . . .   21
  118.  
  119.      File  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   22
  120.        QCOPYFIL  . . . . . . . . . . . . . . . . . . . . . . . . . . .   22
  121.        QDELETE   . . . . . . . . . . . . . . . . . . . . . . . . . . .   22
  122.        QEXIST  . . . . . . . . . . . . . . . . . . . . . . . . . . . .   23
  123.        QMOVEFIL  . . . . . . . . . . . . . . . . . . . . . . . . . . .   24
  124.        QRENAME   . . . . . . . . . . . . . . . . . . . . . . . . . . .   25
  125.  
  126.  
  127.      QUICKBAS.LIB -- Version 1.0                                         ii
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.      Miscellaneous   . . . . . . . . . . . . . . . . . . . . . . . . .   26
  137.        ALARM   . . . . . . . . . . . . . . . . . . . . . . . . . . . .   26
  138.        QCLOCK  . . . . . . . . . . . . . . . . . . . . . . . . . . . .   26
  139.        QDOSVER   . . . . . . . . . . . . . . . . . . . . . . . . . . .   27
  140.        PAUSE   . . . . . . . . . . . . . . . . . . . . . . . . . . . .   27
  141.        QWEEKDAY  . . . . . . . . . . . . . . . . . . . . . . . . . . .   27
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.      QUICKBAS.LIB -- Version 1.0                                        iii
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.      INTRODUCTION
  203.  
  204.  
  205.  
  206.      Quickbas.Lib is  a collection  of subroutines written in Assembler for
  207.      the  Microsoft  Quick  Basic  compiler.   Many  of  the  routines  are
  208.      functionally  the  same  as  routines found  in  other  Basic  Library
  209.      packages. In addition, I have  added several  routines that  were  not
  210.      available and which  I  find to be very helpful. I  have tested all of
  211.      the routines and they have worked for me on my AT&T PC6300.  I am sure
  212.      that they will work  on any AT&T  compatable machine.   While I cannot
  213.      afford to purchase the Microsoft BASIC compiler, I  believe that these
  214.      routines will function as written on that compiler.
  215.  
  216.      The reason  that I wrote these  routines is because I  found  that  my
  217.      favorite subroutine library  has finally gone commercial.  While I can
  218.      understand the  reason for doing this, I  do not completely agree with
  219.      it.  The  routines that I have written  are  for whomever wants to use
  220.      them. I am not charging anything as long as they are used for personal
  221.      use or freeware programs.  If any of these routines are to be  used in
  222.      any packages that are to be sold to the public, I feel it is only fair
  223.      that  I  be  informed of  this use.   I  also  feel that it  would  be
  224.      appropriate in  this case to send  me a small  donation.  I  am not in
  225.      this to make money but  if someone else is going to make money from my
  226.      work, I should get at least a little something from it.
  227.  
  228.      As  you may have noticed, I did not include the source  code for these
  229.      routines.  The reason  for this  is to protect these routines from any
  230.      changes which may cause them  to  no  longer function the way they are
  231.      documented.  I am willing to  accept  any comments or suggestions  for
  232.      changes but  I will have  the  final say on  what happens.  I  do  not
  233.      intend to make changes which would cause these routine not to function
  234.      as originally documented unless it  is felt  that  these changes  will
  235.      only improve the routines. Of course if this happens, I will make note
  236.      of it so  please  read the  #@!%$& documentation.  (I know, I  hate to
  237.      read documentation almost as much as I hate writing it.)
  238.  
  239.      I  do have one  thing  that I would like  to ask of anyone  who  might
  240.      decide to use any or all of these routines, let me know what you think
  241.      of  them.   I  like praise but  I can  also  take criticisum.  You can
  242.      either sent me a  note at  the  address on the front cover  of leave a
  243.      note  for  me  on  the  DeathStar  RBBS  in  Orlando.   The  number is
  244.      305-660-6300.
  245.  
  246.      Make sure that you  read the information  on  Global  Variables, it is
  247.      very important if you want the routines to function properly.
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.      QUICKBAS.LIB -- Version 1.0                                          1
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.      ACKNOWLEDGEMENTS
  269.  
  270.  
  271.  
  272.      As in  past endevors, Charlie Wooster has been very helpful in helping
  273.      me develop these routines.  He has  the foresight to think of routines
  274.      that users could use instead of creating routines and then hoping that
  275.      people will use them.  Thanks Charlie!
  276.  
  277.      I would like to take credit for all the routines contained in Quickbas
  278.      but that  is  not the case.   Many of  the routines were  derived from
  279.      routines in  Leo J. Scanlons "Assembly Language Subroutines for MS-DOS
  280.      Computers".  This is a  very handy  book and  if you don't have a copy
  281.      and  like to write assembly programs, I would recommend it. Another of
  282.      his  books  that I  use  quite often  is  "8086/88  Assembly  Language
  283.      Programming".  Page 100 is used quite often.
  284.  
  285.      The  QINPUT routine  included  in the  library  was developed from the
  286.      article "The Finishing Strokes"  by  Hardin Brothers in the  September
  287.      1987 (#6) issue  of PCResource magazine.  Hardin has been writing good
  288.      articles for some time now, I remember some from 80 MICRO, and  he has
  289.      several good ones in  PCResource.   I  find this a very good  magazine
  290.      with a good amount of information on Quick Basic programming.
  291.  
  292.      The  QCLOCK  routine supplied is  based upon  the CLOCK.ASM program by
  293.      Robert J. Karp in the October 13, 1987 issue (Vol 7, Number 17)  of PC
  294.      Magazine.
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.      QUICKBAS.LIB -- Version 1.0                                          2
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.      GLOBAL VARIABLES
  335.  
  336.  
  337.  
  338.      QINIT
  339.  
  340.  
  341.      In order to  make these  routines a  little  easier  to  use,  I  have
  342.      provided the following  routine which  will  set some global variables
  343.      which are shared by most of the other  routines  as well  as the BASIC
  344.      program.   This  means  that you  will  not have  to  include  certain
  345.      variables  when they  are called.  This will make the calling sequence
  346.      somewhat smaller  and easier to remember. In  addition, there are also
  347.      some internal variables that get set which are only used by routines I
  348.      have  provided.  I have included the call in all of the examples where
  349.      the routine is required.
  350.  
  351.      The parameters that are used by QINIT are as follow:
  352.  
  353.              NAttr  - The normal print color attribute.
  354.              AAttr  - The action color attribute.
  355.              HAttr  - The attribute that is used for high-lighting.
  356.              EAttr  - The error attribute.
  357.              RC     - The return code variable set in various routines.
  358.  
  359.         Example:
  360.  
  361.              DEFINT A-Z
  362.              NAttr = 0 : AAttr = 0 : HAttr = 0 : EAttr = 0 : RC = 0
  363.              CALL QINIT(NAttr,AAttr,HAttr,EAttr,RC)
  364.              .
  365.              Fgrd = 7 : Bkgrd = 0
  366.              CALL QATTR(Fgrd,Bkgrd,Nattr)
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.      QUICKBAS.LIB -- Version 1.0                                          3
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.      KEYBOARD
  401.  
  402.  
  403.  
  404.      QINPUT
  405.  
  406.  
  407.      A keyboard  input  routine that  has full  editing  capabilities.   By
  408.      passing  a verification string, each key  stroke is validated as it is
  409.      entered.  It also returns a  RETURN CODE which indicates which key was
  410.      pressed to exit the input routine.  The input string can either be all
  411.      spaces  or it can contain existing data to  be updated.  It should  be
  412.      noted  here,  because  of  the  restrictions  BASIC forces  on  called
  413.      subroutines  in ASSEMBLER, the size of the  string must be set  before
  414.      calling the  subroutine.  The RC variable  must be initialized  with a
  415.      number from 0 to 50 which  is  used to set which  return keys will  be
  416.      used. The keys with an RC equal to or less than the passed number will
  417.      be  the active  return keys.  See the next page for  the  valid return
  418.      keys. The color attribute used  by  the program is the Aattr variable.
  419.      The  program  will reverse the  color  attribute that  is  set,  which
  420.      usually means that the input field will highlighted.
  421.  
  422.      The format of the call is as follows:
  423.  
  424.         CALL QINPUT(Ver$,InBuff$,Row,Col,Page,Slen)
  425.  
  426.         Where:
  427.  
  428.              Ver$    - the string containing that valid characters.
  429.              InBuff$ - the input buffer which can be pre-populated.
  430.              Row     - the screen row to display the buffer.
  431.              Column  - the screen column to display the buffer.
  432.              Page    - the video display page (Valid pages are 0-3).
  433.              Slen    -  the  length of  InBuff$ less the trailing spaces on
  434.              return.
  435.  
  436.         Example:
  437.  
  438.              DEFINT A-Z
  439.              NAttr = 0 : AAttr = 0 : HAttr = 0 : EAttr = 0 : RC = 0
  440.              CALL QINIT(NAttr,AAttr,HAttr,EAttr,RC)
  441.              Fgrd    = 7
  442.              Bkgrd   = 1
  443.              CALL QATTR(Fgrd,Bkgrd,Aattr)
  444.              REM  Only accept alpha-numeric input
  445.              Ver$    = "0123456789"
  446.              Ver$    = Ver$+"abcdefghijklmnopqrstuvwxyz"
  447.              Ver$    = Ver$+"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  448.              InBuff$ = SPACE$(20)
  449.              Row = 10  :  Col = 20  :  Page = 0  :  RC = 8
  450.              CALL QINPUT(Ver$,InBuff$,Row,Col,Page,Slen)
  451.              IF RC > 0 THEN
  452.                 InBuff$ = LEFT$(InBuff$,Slen)
  453.              END IF
  454.  
  455.  
  456.  
  457.      QUICKBAS.LIB -- Version 1.0                                          4
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.      The following are the valid editing keys:
  467.  
  468.              INSERT      - Toggles the insert mode and over-type mode.
  469.              DELETE      - Delete character at cursor.
  470.              BACKSPACE   - Destructive backspace.
  471.              LEFT ARROW  - Move the cursor to the left.
  472.              RIGHT ARROW - Move the cursor to the right.
  473.              HOME        - Move the cursor to the beginning of the field.
  474.              END         - Move the cursor to the end of the field.
  475.              CTL-HOME    - Move cursor to the start and erase the field.
  476.              CTL-END     - Erase from the cursor to the end of the field.
  477.              CTL-BkSpace - Erase from the cursor to the start of the field.
  478.  
  479.      The following are the return codes returned upon exit:
  480.  
  481.              RC  - Key pressed                 RC  - Key pressed
  482.  
  483.              00  - ESC                         09  - ALT HOME
  484.              01  - RETURN                      10  - ALT-END
  485.              02  - CTL-RETURN               11-20  - F1 thru F10
  486.              03  - TAB                      21-30  - SHIFT-F1 thru SHIFT-F10
  487.              04  - SHIFT-TAB                31-40  - CTL-F1 thru CTL-F10
  488.              05  - UP ARROW                 41-50  - ALT-F1 thru ALT-F10
  489.              06  - DOWN ARROW
  490.              07  - PAGE UP
  491.              08  - PAGE DOWN
  492.  
  493.  
  494.  
  495.  
  496.  
  497.  
  498.  
  499.  
  500.  
  501.  
  502.  
  503.  
  504.  
  505.  
  506.  
  507.  
  508.  
  509.  
  510.  
  511.  
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.      QUICKBAS.LIB -- Version 1.0                                          5
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.      QMENU
  533.  
  534.  
  535.      A menu routine that display a menu string array.   Upon  exit it  will
  536.      pass back in the RC which menu item  was pressed or  if the escape key
  537.      was pressed (0).  This  routine uses the QINIT routine.  It  also uses
  538.      the Nattr, Aattr and the  Hattr color attributes to display the  menu.
  539.      The menu selection number will be returned in the RC variable.
  540.  
  541.      The format of the call is as follows:
  542.  
  543.         CALL QMENU(ArrayCnt,FirstAddr,Row,Col,Page)
  544.  
  545.         Where:
  546.  
  547.              ArrayCnt  - the number of array elements.
  548.              FirstAddr - the VARPTR address of the first array element.
  549.              Row       - the screen row to start printing the menu.
  550.              Column    - the screen column to use.
  551.              Page      - the video display page (Valid pages are 0-3).
  552.  
  553.         Example:
  554.  
  555.              OPTION BASE 0
  556.              DEFINT A-Z
  557.              DIM XX$(5)
  558.              NAttr = 0 : AAttr = 0 : HAttr = 0 : EAttr = 0 : RC = 0
  559.              CALL QINIT(NAttr,AAttr,HAttr,EAttr,RC)
  560.              .
  561.              CALL QATTR(1,3,nattr)
  562.              CALL QATTR(5,3,aattr)
  563.              CALL QATTR(3,1,hattr)
  564.              .
  565.              XX$(0)= "A - This is row one      "
  566.              XX$(1)= "B - This is row two      "
  567.              XX$(2)= "C - This is row three    "
  568.              XX$(3)= "D - This is row four     "
  569.              XX$(4)= "E - This is row five     "
  570.              .
  571.              ArrayCnt  = UBOUND(XX$,1)
  572.              FirstAddr = VARPTR(XX$(0))
  573.              Row       = (24-UBOUND(XX$,1))\2
  574.              X         = LEN(XX$(0))
  575.              Col       = (80-X)\2
  576.              Page      = 0
  577.              CALL QMENU(ArrayCnt,FirstAddr,Row,Col,Page)
  578.              .
  579.              ON RC GOTO Label 1,Label 2,Label 3,Label 4,Label 5
  580.              END
  581.              .
  582.              .
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.      QUICKBAS.LIB -- Version 1.0                                          6
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.      The following are the valid menu keys:
  599.  
  600.              ESCAPE      - Exit the menu routine.
  601.              RETURN      - Select current highlighted item.
  602.              UP ARROW    - Move the Menu bar up.
  603.              DOWN ARROW  - Move the Menu bar down.
  604.              HOME        - Move the Menu bar to the first item.
  605.              END         - Move the Menu bar to the last item.
  606.  
  607.  
  608.  
  609.  
  610.  
  611.  
  612.  
  613.  
  614.  
  615.  
  616.  
  617.  
  618.  
  619.  
  620.  
  621.  
  622.  
  623.  
  624.  
  625.  
  626.  
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.      QUICKBAS.LIB -- Version 1.0                                          7
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.      STRING
  665.  
  666.  
  667.  
  668.      LOWER
  669.  
  670.  
  671.      Converts a string to all lowercase characters.
  672.  
  673.         Example:
  674.  
  675.              TstStr$="THIS STrING Will be conVERted to LOWERcase"
  676.              CALL LOWER(TstStr$)
  677.  
  678.  
  679.  
  680.      QEXTRACT
  681.  
  682.  
  683.      Returns the  start  and length  of a  word in  a string  based upon  a
  684.      delimiter which is passed in the call.
  685.  
  686.         Example:
  687.  
  688.              DEFINT A-Z
  689.              NAttr = 0 : AAttr = 0 : HAttr = 0 : EAttr = 0 : RC = 0
  690.              CALL QINIT(NAttr,AAttr,HAttr,EAttr,RC)
  691.              TstStr$="This@string@contains@five@words"
  692.              Index = 4
  693.              Delim = "@"
  694.              CALL QEXTRACT(TstStr$,DELIM,Index,Strt,Slen)
  695.              Found$ = MID$(TstStr$,Strt,Slen)
  696.              PRINT "The fourth word of the string is " Found$
  697.  
  698.  
  699.  
  700.      QWORD
  701.  
  702.  
  703.      Returns the start and length of a word in a space delimited string.
  704.  
  705.         Example:
  706.  
  707.              DEFINT A-Z
  708.              NAttr = 0 : AAttr = 0 : HAttr = 0 : EAttr = 0 : RC = 0
  709.              CALL QINIT(NAttr,AAttr,HAttr,EAttr,RC)
  710.              TstStr$="This string contains five words"
  711.              Index = 4
  712.              CALL QWORD(TstStr$,Index,Strt,Slen)
  713.              Found$ = MID$(TstStr$,Strt,Slen)
  714.              PRINT "The fourth word of the string is " Found$
  715.  
  716.  
  717.  
  718.  
  719.  
  720.  
  721.      QUICKBAS.LIB -- Version 1.0                                          8
  722.  
  723.  
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730.      QWORDS
  731.  
  732.  
  733.      Returns the number of space delimited words in a string.
  734.  
  735.         Example:
  736.  
  737.              DEFINT A-Z
  738.              NAttr = 0 : AAttr = 0 : HAttr = 0 : EAttr = 0 : RC = 0
  739.              CALL QINIT(NAttr,AAttr,HAttr,EAttr,RC)
  740.              TstStr$="This string contains five words"
  741.              CALL QWORDS(TstStr$)
  742.              PRINT "The number of words in this string is " RC
  743.  
  744.  
  745.  
  746.      UPPER
  747.  
  748.  
  749.      Converts a string to all uppercase characters.
  750.  
  751.         Example:
  752.  
  753.              TstStr$="THIS STrING Will be conVERted to UPPERcase"
  754.              CALL UPPER(TstStr$)
  755.  
  756.  
  757.  
  758.  
  759.  
  760.  
  761.  
  762.  
  763.  
  764.  
  765.  
  766.  
  767.  
  768.  
  769.  
  770.  
  771.  
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778.  
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786.  
  787.      QUICKBAS.LIB -- Version 1.0                                          9
  788.  
  789.  
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.      VIDEO
  797.  
  798.  
  799.  
  800.      QATTR
  801.  
  802.  
  803.      Calculates the color attribute for routines such as QPRT, QWINDOW, etc
  804.      It also allows use of the "blink" attribute.
  805.  
  806.         Example:
  807.  
  808.              DEFINT A-Z
  809.              Fgrd = 7 : Bkgrd = 0
  810.              CALL QATTR(Fgrd,Bkgrd,Nattr)
  811.  
  812.  
  813.  
  814.      QPRTN  QPRTA  QPRTH  QPRTE
  815.  
  816.  
  817.      Print a  string at the  specified  location on  the screen.   The last
  818.      character of the  name determines which of the  four global attributes
  819.      will be used.  It also  allows the string to be print on any  of the 4
  820.      video pages.
  821.  
  822.      The parameters that are used by QPRTx are as follow:
  823.  
  824.              Prt$ - The string to be printed.
  825.              Row  - The row to print.
  826.              Col  - The column to print.
  827.              Page - The video page to print on.
  828.  
  829.         Example:
  830.  
  831.              DEFINT A-Z
  832.              NAttr = 0 : AAttr = 0 : HAttr = 0 : EAttr = 0 : RC = 0
  833.              CALL QINIT(NAttr,AAttr,HAttr,EAttr,RC)
  834.               .
  835.               .
  836.              Prt$="This is the string to be printed."
  837.              Fgrd = 7 : Bkgrd = 0
  838.              CALL QATTR(Fgrd,Bkgrd,NAttr)
  839.              Row=5 : Col=10 : Page=0
  840.              CALL QPRTN(Prt$,Row,Col,Page)
  841.  
  842.  
  843.  
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.      QUICKBAS.LIB -- Version 1.0                                         10
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.      QMPRTN  QMPRTA  QMPRTH  QMPRTE
  863.  
  864.  
  865.      Print a string  array at  the specified  location on the screen.   The
  866.      last  character  of  the  name  determines which  of the  four  global
  867.      attributes  will be used. It also allows the string to be print on any
  868.      of the 4 video pages.
  869.  
  870.      The parameters that are used by QMPRTx are as follow:
  871.  
  872.              Elements - The number of occurances of the array.
  873.              FrstAddr - The VARPTR addres of the first array element.
  874.              Row      - The row to start printing.
  875.              Col      - The column to start in.
  876.              Page     - The video page to print on.
  877.  
  878.         Example:
  879.  
  880.              OPTION BASE 0
  881.              DEFINT A-Z
  882.              DIM Prt$(4)
  883.              NAttr = 0 : AAttr = 0 : HAttr = 0 : EAttr = 0 : RC = 0
  884.              CALL QINIT(NAttr,AAttr,HAttr,EAttr,RC)
  885.               .
  886.               .
  887.              Prt$(0)="This is the first string to be printed."
  888.              Prt$(1)="This is the second string to be printed."
  889.              Prt$(2)="This is the third string to be printed."
  890.              Prt$(3)="This is the fourth string to be printed."
  891.              Fgrd = 1 : Bkgrd = 7
  892.              CALL QATTR(Fgrd,Bkgrd,AAttr)
  893.              Row=5 : Col=10 : Page=0
  894.              Elements=4 : FrstAddr=VARPTR(PRT$(0))
  895.              CALL QMPRTA(Elements,FrstAddr,Row,Col,Page)
  896.  
  897.  
  898.  
  899.  
  900.  
  901.  
  902.  
  903.  
  904.  
  905.  
  906.  
  907.  
  908.  
  909.  
  910.  
  911.  
  912.  
  913.  
  914.  
  915.  
  916.  
  917.  
  918.  
  919.      QUICKBAS.LIB -- Version 1.0                                         11
  920.  
  921.  
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.      QSCROLL
  929.  
  930.  
  931.      Scrolls the screen up using the locations that are passed in the call.
  932.      One or more lines can be scrolled and if the number is zero, the whole
  933.      area will  be cleared.  Be sure that  the rows and columns are  within
  934.      the screen.
  935.  
  936.         Example:
  937.  
  938.              DEFINT A-Z
  939.              Trow = 5 : Lcol = 15 : Brow = 15 : Rcol = 65 : Lines = 2
  940.              CALL QSCROLL(Trow,Lcol,Brow,Rcol,Lines)
  941.               .
  942.              REM The following will clear an area of the screen
  943.              Trow = 5 : Lcol = 15 : Brow = 15 : Rcol = 65 : Lines = 0
  944.              CALL QSCROLL(Trow,Lcol,Brow,Rcol,Lines)
  945.  
  946.  
  947.  
  948.      QSCROLLB
  949.  
  950.  
  951.          Scrolls the screen down using the locations that are passed in the
  952.          call.  One or  more lines  can be scrolled  and  if  the number is
  953.          zero, the whole area  will be cleared.   Be sure that the rows and
  954.          columns are within the screen.
  955.  
  956.             Example:
  957.  
  958.                  DEFINT A-Z
  959.                  Trow = 5 : Lcol = 15 : Brow = 15 : Rcol = 65 : Lines = 2
  960.                  CALL QSCROLLB(Trow,Lcol,Brow,Rcol,Lines)
  961.  
  962.  
  963.  
  964.  
  965.  
  966.  
  967.  
  968.  
  969.  
  970.  
  971.  
  972.  
  973.  
  974.  
  975.  
  976.  
  977.  
  978.  
  979.  
  980.  
  981.  
  982.  
  983.  
  984.  
  985.      QUICKBAS.LIB -- Version 1.0                                         12
  986.  
  987.  
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994.      QSCRREST
  995.  
  996.  
  997.          Restore the  screen  from  an  array  that  had  been  saved  with
  998.          QSCRSAVE. It will restore the screen to any of the 4 video pages.
  999.  
  1000.             Example:
  1001.  
  1002.                  OPTION BASE 1
  1003.                  DEFINT A-Z
  1004.                  DIM ScrnHold(2000)
  1005.                  ArrayAddr = VARPTR(ScrnHold(1))  :  Page = 0
  1006.                  CALL QSCRREST(ArrayAddr,Page)
  1007.                  LOCATE RowHold,ColHold
  1008.  
  1009.  
  1010.  
  1011.      QSCRSAVE
  1012.  
  1013.  
  1014.          Save the requested  video page  (0 - 3)  into array.   Use this in
  1015.          text mode only.  The array must be an integer array dimensioned to
  1016.          at least 2000 occurances.  The starting address of the array  must
  1017.          be passed,  use the VARPTR function  to  get  this  address.   The
  1018.          cursor location  is not  saved  so,  if  it  is  needed,  save the
  1019.          location.   More than  one screen can  be  saved into the array as
  1020.          long  as  2000 occurances are dimensioned for each screen and  the
  1021.          appropriate VARPTR address is passed the the routine.
  1022.  
  1023.             Example:
  1024.  
  1025.                  OPTION BASE 1
  1026.                  DEFINT A-Z
  1027.                  DIM ScrnHold(2000)
  1028.                  ArrayAddr = VARPTR(ScrnHold(1))  :  Page = 0
  1029.                  CALL QSCRSAVE(ArrayAddr,Page)
  1030.                  RowHold = CSRLIN  :  ColHold = POS(0)
  1031.  
  1032.  
  1033.  
  1034.  
  1035.  
  1036.  
  1037.  
  1038.  
  1039.  
  1040.  
  1041.  
  1042.  
  1043.  
  1044.  
  1045.  
  1046.  
  1047.  
  1048.  
  1049.  
  1050.  
  1051.      QUICKBAS.LIB -- Version 1.0                                         13
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060.      QWINDOW
  1061.  
  1062.  
  1063.          Displays  a  pop-up  window  on the screen.   It requires  several
  1064.          parameters which are  used to determine where  to print the window
  1065.          as well as the type of frame to be used  for the window.  The rows
  1066.          and columns  that are used and the ones that will be used for  the
  1067.          frame.  This routine uses  the  NAttr color attribute that must be
  1068.          initialized with  QINIT  prior  to  using QWINDOW.   If  the value
  1069.          passed is not 1-4, the screen will be cleared based  upon the  row
  1070.          and column values.
  1071.  
  1072.          The parameters that are used by QWINDOW are as follow:
  1073.  
  1074.                  TRow   - The top row of the window.
  1075.                  LCol   - The left column of the window.
  1076.                  BRow   - The bottom row of the window.
  1077.                  RCol   - The right column of the window.
  1078.                  Frame  - The type of frame to be used for the window.
  1079.                  Page   - The video page to print the window on.
  1080.  
  1081.          The types of frames available with QWINDOW are as follow:
  1082.  
  1083.                  1  - Single line frame.
  1084.                  2  - Double line frame.
  1085.                  3  - Double vertical and single horizontial frame.
  1086.                  4  - Single vertical and double horizontial frame.
  1087.  
  1088.             Example:
  1089.  
  1090.                  DEFINT A-Z
  1091.                  NAttr = 0 : AAttr = 0 : HAttr = 0 : EAttr = 0 : RC = 0
  1092.                  CALL QINIT(NAttr,AAttr,HAttr,EAttr,RC)
  1093.                   .
  1094.                   .
  1095.                  Fgrd=7 : Bkgrd=0
  1096.                  CALL QATTR(Fgrd,Bkgrd,NAttr)
  1097.                  TRow=1 : LCol=1 : BRow=25 : RCol=80 : Frame=2 : Page=0
  1098.                  CALL QWINDOW(TRow,LCol,BRow,RCol,Frame,Page)
  1099.  
  1100.  
  1101.  
  1102.  
  1103.  
  1104.  
  1105.  
  1106.  
  1107.  
  1108.  
  1109.  
  1110.  
  1111.  
  1112.  
  1113.  
  1114.  
  1115.  
  1116.  
  1117.      QUICKBAS.LIB -- Version 1.0                                         14
  1118.  
  1119.  
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126.      QWINDOWH
  1127.  
  1128.  
  1129.          Works just like QWINDOW, but in addition, it will draw horizontial
  1130.          lines across the window bases upon the values passed in NLines and
  1131.          RNum.  This routine can be  very useful  in menu windows.   If the
  1132.          value passed in NLines  is  zero,  it  will  function  the same as
  1133.          QWINDOW.  The  VARPTR function must  be used to get the address of
  1134.          the first array element.
  1135.  
  1136.          To use this routine, you must define a numeric array. Each element
  1137.          of this array will contain  the row  in  which you wish to have  a
  1138.          line drawn across the window.  The address of the first  occurance
  1139.          of the array is what is passed to the routine.
  1140.  
  1141.          The parameters that are used by QWINDOWH are as follow:
  1142.  
  1143.                  TRow   - The top row of the window.
  1144.                  LCol   - The left column of the window.
  1145.                  BRow   - The bottom row of the window.
  1146.                  RCol   - The right column of the window.
  1147.                  NLine  - The number of horizontial lines to draw.
  1148.                  RNum   - The VARPTR address of the first array element.
  1149.                  Frame  - The type of frame to be used for the window.
  1150.                  Page   - The video page to print the window on.
  1151.  
  1152.          The types of frames available with QWINDOWH are as follow:
  1153.  
  1154.                  1  - Single line frame.
  1155.                  2  - Double line frame.
  1156.                  3  - Double vertical and single horizontial frame.
  1157.                  4  - Single vertical and double horizontial frame.
  1158.  
  1159.             Example:
  1160.  
  1161.                  OPTION BASE 0
  1162.                  DEFINT A-Z
  1163.                  DIM ARow(2)
  1164.                  NAttr = 0 : AAttr = 0 : HAttr = 0 : EAttr = 0 : RC = 0
  1165.                  CALL QINIT(NAttr,AAttr,HAttr,EAttr,RC)
  1166.                   .
  1167.                   .
  1168.                  Fgrd=7 : Bkgrd=0
  1169.                  CALL QATTR(Fgrd,Bkgrd,NAttr)
  1170.                  TRow=1 : LCol=1 : BRow=25 : RCol=80 : Frame=2 : Page=0
  1171.                  NLine=2 : ARow(0)=3 : ARow(1)=23 : RNum=VARPTR(ARow(0))
  1172.                  CALL QWINDOWH(TRow,LCol,BRow,RCol,NLine,RNum,Frame,Page)
  1173.  
  1174.  
  1175.  
  1176.  
  1177.  
  1178.  
  1179.  
  1180.  
  1181.  
  1182.  
  1183.      QUICKBAS.LIB -- Version 1.0                                         15
  1184.  
  1185.  
  1186.  
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192.      QWINDOWV
  1193.  
  1194.  
  1195.          Works just like  QWINDOW,  but in addition, it will draw  vertical
  1196.          lines down the  window bases upon the values  passed in NLines and
  1197.          CNum.  If the value passed in NLines is zero, it will function the
  1198.          same  as  QWINDOW.  The  VARPTR  function must be  used to get the
  1199.          address of the first array element.
  1200.  
  1201.          To use this routine, you must define a numeric array. Each element
  1202.          of  this array will contain the  row in which  you wish  to have a
  1203.          line drawn down the window.  The address of the first occurance of
  1204.          the array is what is passed to the routine.
  1205.  
  1206.          The parameters that are used by QWINDOWV are as follow:
  1207.  
  1208.                  TRow  - The top row of the window.
  1209.                  LCol  - The left column of the window.
  1210.                  BRow  - The bottom row of the window.
  1211.                  RCol  - The right column of the window.
  1212.                  NLine - The number of vertiacl lines to draw.
  1213.                  CNum  - The VARPTR address of the first array element.
  1214.                  Frame - The type of frame to be used for the window.
  1215.                  Page  - The video page to print the window on.
  1216.  
  1217.          The types of frames available with QWINDOWV are as follow:
  1218.  
  1219.                  1  - Single line frame.
  1220.                  2  - Double line frame.
  1221.                  3  - Double vertical and single horizontial frame.
  1222.                  4  - Single vertical and double horizontial frame.
  1223.  
  1224.             Example:
  1225.  
  1226.                  OPTION BASE 0
  1227.                  DEFINT A-Z
  1228.                  DIM ACol(2)
  1229.                  NAttr = 0 : AAttr = 0 : HAttr = 0 : EAttr = 0 : RC = 0
  1230.                  CALL QINIT(NAttr,AAttr,HAttr,EAttr,RC)
  1231.                   .
  1232.                   .
  1233.                  Fgrd=7 : Bkgrd=0
  1234.                  CALL QATTR(Fgrd,Bkgrd,NAttr)
  1235.                  TRow=1 : LCol=1 : BRow=25 : RCol=80 : Frame=2 : Page=0
  1236.                  NLine=2 : ACol(0)=5 : ACol(1)=75 : CNum=VARPTR(ACol(0))
  1237.                  CALL QWINDOWV(TRow,LCol,BRow,RCol,NLine,CNum,Frame,Page)
  1238.  
  1239.  
  1240.  
  1241.  
  1242.  
  1243.  
  1244.  
  1245.  
  1246.  
  1247.  
  1248.  
  1249.      QUICKBAS.LIB -- Version 1.0                                         16
  1250.  
  1251.  
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258.      VIDREST
  1259.  
  1260.  
  1261.          Restore  a  screen  that  was  saved  with  VIDSAVE.    Color  and
  1262.          monochrome screens  have  4 pages of video memory and this routine
  1263.          will move a screen from pages 1-3 to page 0.
  1264.  
  1265.             Example:
  1266.  
  1267.                  DEFINT A-Z
  1268.                  Page = 2
  1269.                  CALL VIDREST(Page)
  1270.  
  1271.  
  1272.  
  1273.      VIDSAVE
  1274.  
  1275.  
  1276.          Save a screen to video page 1, 2 or 3 from page 0.
  1277.  
  1278.             Example:
  1279.  
  1280.                  DEFINT A-Z
  1281.                  Page = 2
  1282.                  CALL VIDSAVE(Page)
  1283.  
  1284.  
  1285.  
  1286.  
  1287.  
  1288.  
  1289.  
  1290.  
  1291.  
  1292.  
  1293.  
  1294.  
  1295.  
  1296.  
  1297.  
  1298.  
  1299.  
  1300.  
  1301.  
  1302.  
  1303.  
  1304.  
  1305.  
  1306.  
  1307.  
  1308.  
  1309.  
  1310.  
  1311.  
  1312.  
  1313.  
  1314.  
  1315.      QUICKBAS.LIB -- Version 1.0                                         17
  1316.  
  1317.  
  1318.  
  1319.  
  1320.  
  1321.  
  1322.  
  1323.  
  1324.      DISK
  1325.  
  1326.  
  1327.  
  1328.      QGETDRV
  1329.  
  1330.  
  1331.      Get the current logged disk drive.
  1332.  
  1333.         Example:
  1334.  
  1335.              DrvStr$="?:\"
  1336.              CALL QGETDRV(DrvStr$)
  1337.              PRINT "The current disk is " DrvStr$
  1338.  
  1339.  
  1340.  
  1341.      QSETDRV
  1342.  
  1343.  
  1344.      Change the current logged disk drive.
  1345.  
  1346.         Example:
  1347.  
  1348.              NewDrv$="C:"
  1349.              CALL QSETDRV(NewDrv$)
  1350.  
  1351.  
  1352.  
  1353.  
  1354.  
  1355.  
  1356.  
  1357.  
  1358.  
  1359.  
  1360.  
  1361.  
  1362.  
  1363.  
  1364.  
  1365.  
  1366.  
  1367.  
  1368.  
  1369.  
  1370.  
  1371.  
  1372.  
  1373.  
  1374.  
  1375.  
  1376.  
  1377.  
  1378.  
  1379.  
  1380.  
  1381.      QUICKBAS.LIB -- Version 1.0                                         18
  1382.  
  1383.  
  1384.  
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390.      SUB-DIRECTORY
  1391.  
  1392.  
  1393.  
  1394.      QCHDIR
  1395.  
  1396.  
  1397.      Change  the current sub-directory.  Works the same  as the  DOS  CHDIR
  1398.      command except a return code is set.
  1399.  
  1400.         Example:
  1401.  
  1402.              DEFINT A-Z
  1403.              NAttr = 0 : AAttr = 0 : HAttr = 0 : EAttr = 0 : RC = 0
  1404.              CALL QINIT(NAttr,AAttr,HAttr,EAttr,RC)
  1405.              ChFile$="C:\NEWSUB\DIR"+CHR$(0)
  1406.              CALL QCHDIR(ChFile$)
  1407.              IF RC THEN
  1408.                 PRINT "New directory not selected"
  1409.              ELSE
  1410.                 PRINT "New directory"
  1411.              END IF
  1412.  
  1413.  
  1414.  
  1415.      QCHKDIR
  1416.  
  1417.  
  1418.      Checks to see if the requested sub-directory exists.   The return code
  1419.      is set if the directory doesn't exist.
  1420.  
  1421.         Example:
  1422.  
  1423.              DEFINT A-Z
  1424.              NAttr = 0 : AAttr = 0 : HAttr = 0 : EAttr = 0 : RC = 0
  1425.              CALL QINIT(NAttr,AAttr,HAttr,EAttr,RC)
  1426.              ChkFile$="C:\CHKSUB\DIR"+CHR$(0)
  1427.              CALL QCHKDIR(ChkFile$)
  1428.              IF RC THEN
  1429.                 PRINT "The requested sub-directory doesn't exist"
  1430.              ELSE
  1431.                 PRINT "Sub-directory exists"
  1432.              END IF
  1433.  
  1434.  
  1435.  
  1436.  
  1437.  
  1438.  
  1439.  
  1440.  
  1441.  
  1442.  
  1443.  
  1444.  
  1445.  
  1446.  
  1447.      QUICKBAS.LIB -- Version 1.0                                         19
  1448.  
  1449.  
  1450.  
  1451.  
  1452.  
  1453.  
  1454.  
  1455.  
  1456.      QGETDIR
  1457.  
  1458.  
  1459.      Get  the current sub-directory.  The size  of  the  directory name  is
  1460.      returned.
  1461.  
  1462.         Example:
  1463.  
  1464.              DEFINT A-Z
  1465.              DirStr$=SPACE$(64)
  1466.              CALL QGETDIR(DirStr$,Dlen)
  1467.              DirStr$ = LEFT$(DirStr$,Dlen)
  1468.              PRINT "The current directory is " DirStr$
  1469.  
  1470.  
  1471.  
  1472.      QMKDIR
  1473.  
  1474.  
  1475.      Create  a  new sub-directory. Works the same as the DOS MKDIR  command
  1476.      except a return code is set if the directory wasn't created.
  1477.  
  1478.         Example:
  1479.  
  1480.              DEFINT A-Z
  1481.              NAttr = 0 : AAttr = 0 : HAttr = 0 : EAttr = 0 : RC = 0
  1482.              CALL QINIT(NAttr,AAttr,HAttr,EAttr,RC)
  1483.              MkFile$="NEWSUBDIR"+CHR$(0)
  1484.              CALL QMKDIR(MkFile$)
  1485.              IF RC THEN
  1486.                 PRINT "New directory not created"
  1487.              ELSE
  1488.                 PRINT "New directory created"
  1489.              END IF
  1490.  
  1491.  
  1492.  
  1493.  
  1494.  
  1495.  
  1496.  
  1497.  
  1498.  
  1499.  
  1500.  
  1501.  
  1502.  
  1503.  
  1504.  
  1505.  
  1506.  
  1507.  
  1508.  
  1509.  
  1510.  
  1511.  
  1512.  
  1513.      QUICKBAS.LIB -- Version 1.0                                         20
  1514.  
  1515.  
  1516.  
  1517.  
  1518.  
  1519.  
  1520.  
  1521.  
  1522.      QRMDIR
  1523.  
  1524.  
  1525.      Deletes an existing sub-directory.   Works  the  same a  the DOS RMDIR
  1526.      command except the return code will be  set if the requested directory
  1527.      doesn't already exist.
  1528.  
  1529.         Example:
  1530.  
  1531.              DEFINT A-Z
  1532.              NAttr = 0 : AAttr = 0 : HAttr = 0 : EAttr = 0 : RC = 0
  1533.              CALL QINIT(NAttr,AAttr,HAttr,EAttr,RC)
  1534.              RmFile$="OLDSUBDIR"+CHR$(0)
  1535.              CALL QRMDIR(RmFile$)
  1536.              IF RC THEN
  1537.                 PRINT "The sub-directory was not deleted"
  1538.              ELSE
  1539.                 PRINT "The sub-directory was deleted"
  1540.              END IF
  1541.  
  1542.  
  1543.  
  1544.  
  1545.  
  1546.  
  1547.  
  1548.  
  1549.  
  1550.  
  1551.  
  1552.  
  1553.  
  1554.  
  1555.  
  1556.  
  1557.  
  1558.  
  1559.  
  1560.  
  1561.  
  1562.  
  1563.  
  1564.  
  1565.  
  1566.  
  1567.  
  1568.  
  1569.  
  1570.  
  1571.  
  1572.  
  1573.  
  1574.  
  1575.  
  1576.  
  1577.  
  1578.  
  1579.      QUICKBAS.LIB -- Version 1.0                                         21
  1580.  
  1581.  
  1582.  
  1583.  
  1584.  
  1585.  
  1586.  
  1587.  
  1588.      FILE
  1589.  
  1590.  
  1591.  
  1592.      QCOPYFIL
  1593.  
  1594.  
  1595.      Copies a file.  This is a better way of copying a file because it does
  1596.      not require the SHELL command.  This routine will replace  the file on
  1597.      the destination  device,  use  QEXIST  to  check if the  file  already
  1598.      exists.  The return code will be set if any errors are encountered.
  1599.  
  1600.         Example:
  1601.  
  1602.              DEFINT A-Z
  1603.              NAttr = 0 : AAttr = 0 : HAttr = 0 : EAttr = 0 : RC = 0
  1604.              CALL QINIT(NAttr,AAttr,HAttr,EAttr,RC)
  1605.               .
  1606.              OldFile$="TESTFILE.OLD"+CHR$(0)
  1607.              NewFile$="TESTFILE.NEW"+CHR$(0)
  1608.              CALL QCOPYFIL(OldFile$,NewFile$)
  1609.              IF RC THEN
  1610.                 PRINT "File not copied"
  1611.              ELSE
  1612.                 PRINT "File copied"
  1613.              END IF
  1614.  
  1615.  
  1616.  
  1617.      QDELETE
  1618.  
  1619.  
  1620.      Deletes a file.   Wildcards not allowed.  Upon  exit, a return code is
  1621.      set to indicate if the file was deleted or not.
  1622.  
  1623.         Example:
  1624.  
  1625.              DEFINT A-Z
  1626.              NAttr = 0 : AAttr = 0 : HAttr = 0 : EAttr = 0 : RC = 0
  1627.              CALL QINIT(NAttr,AAttr,HAttr,EAttr,RC)
  1628.               .
  1629.              DelFile$="QUICKBAS.LIB"+CHR$(0)
  1630.              CALL QDELETE(DelFile$)
  1631.              IF RC THEN
  1632.                 PRINT "File not deleted"
  1633.              ELSE
  1634.                 PRINT "File deleted"
  1635.              END IF
  1636.  
  1637.  
  1638.  
  1639.  
  1640.  
  1641.  
  1642.  
  1643.  
  1644.  
  1645.      QUICKBAS.LIB -- Version 1.0                                         22
  1646.  
  1647.  
  1648.  
  1649.  
  1650.  
  1651.  
  1652.  
  1653.  
  1654.      QEXIST
  1655.  
  1656.  
  1657.      Tells you if  the requested file already exists.  Returns  zero  if it
  1658.      doesn't, or a  -1 if  it does.   Requires  an ASCIZ  filename  without
  1659.      wildcards.
  1660.  
  1661.         Example:
  1662.  
  1663.              DEFINT A-Z
  1664.              NAttr = 0 : AAttr = 0 : HAttr = 0 : EAttr = 0 : RC = 0
  1665.              CALL QINIT(NAttr,AAttr,HAttr,EAttr,RC)
  1666.               .
  1667.              ChkFile$="FINDFILE.TXT"+CHR$(0)
  1668.              CALL QEXIST(ChkFile$)
  1669.              IF RC THEN
  1670.                 PRINT "File already exists"
  1671.              ELSE
  1672.                 PRINT "File not found"
  1673.              END IF
  1674.  
  1675.  
  1676.  
  1677.  
  1678.  
  1679.  
  1680.  
  1681.  
  1682.  
  1683.  
  1684.  
  1685.  
  1686.  
  1687.  
  1688.  
  1689.  
  1690.  
  1691.  
  1692.  
  1693.  
  1694.  
  1695.  
  1696.  
  1697.  
  1698.  
  1699.  
  1700.  
  1701.  
  1702.  
  1703.  
  1704.  
  1705.  
  1706.  
  1707.  
  1708.  
  1709.  
  1710.  
  1711.      QUICKBAS.LIB -- Version 1.0                                         23
  1712.  
  1713.  
  1714.  
  1715.  
  1716.  
  1717.  
  1718.  
  1719.  
  1720.      QMOVEFIL
  1721.  
  1722.  
  1723.      Moves a file.  It functions the same way as  QCOPYFIL but the original
  1724.      file will be deleted after the copy  is completed.   If the file is to
  1725.      be  moved  to a different directory  on  the same device, it will move
  1726.      just  the  directory entry which  will make the  move much faster. See
  1727.      QCOPYFIL for additional information.
  1728.  
  1729.         Example:
  1730.  
  1731.              DEFINT A-Z
  1732.              NAttr = 0 : AAttr = 0 : HAttr = 0 : EAttr = 0 : RC = 0
  1733.              CALL QINIT(NAttr,AAttr,HAttr,EAttr,RC)
  1734.               .
  1735.              REM Move a file from the A drive to the C drive
  1736.              OldFile$="A:TESTFILE.TXT"+CHR$(0)
  1737.              NewFile$="C:\TESTSUB\TESTFILE.TXT"+CHR$(0)
  1738.              CALL QCOPYFIL(OldFile$,NewFile$)
  1739.              IF RC THEN
  1740.                 PRINT "File not moved"
  1741.              ELSE
  1742.                 PRINT "File moved"
  1743.              END IF
  1744.               .
  1745.               .
  1746.              REM Move a file to a different directory on the C drive
  1747.              OldFile$="TESTFILE.TXT"+CHR$(0)
  1748.              NewFile$="\TESTSUB\TESTFILE.TXT"+CHR$(0)
  1749.              CALL QCOPYFIL(OldFile$,NewFile$)
  1750.              IF RC THEN
  1751.                 PRINT "File not moved"
  1752.              ELSE
  1753.                 PRINT "File moved"
  1754.              END IF
  1755.  
  1756.  
  1757.  
  1758.  
  1759.  
  1760.  
  1761.  
  1762.  
  1763.  
  1764.  
  1765.  
  1766.  
  1767.  
  1768.  
  1769.  
  1770.  
  1771.  
  1772.  
  1773.  
  1774.  
  1775.  
  1776.  
  1777.      QUICKBAS.LIB -- Version 1.0                                         24
  1778.  
  1779.  
  1780.  
  1781.  
  1782.  
  1783.  
  1784.  
  1785.  
  1786.      QRENAME
  1787.  
  1788.  
  1789.      Rename an existing file.   Can also  be  used to move  a file from one
  1790.      sub-directory  to  another.   Requires  an  ASCIIZ  filename   without
  1791.      wildcards for both files.
  1792.  
  1793.         Example:
  1794.  
  1795.              DEFINT A-Z
  1796.              NAttr = 0 : AAttr = 0 : HAttr = 0 : EAttr = 0 : RC = 0
  1797.              CALL QINIT(NAttr,AAttr,HAttr,EAttr,RC)
  1798.               .
  1799.              REM Rename a file
  1800.              OldFile$="\FIRSTDIR\MYFILE.TXT"+CHR$(0)
  1801.              NewFile$="MYFILE.DOC"+CHR$(0)
  1802.              CALL QRENAME(OldFile$,NewFile$)
  1803.              IF RC THEN
  1804.                 PRINT "File not renamed"
  1805.              ELSE
  1806.                 PRINT "File renamed"
  1807.              END IF
  1808.               .
  1809.               .
  1810.              REM Move a file
  1811.              OldFile$="\FIRSTDIR\MYFILE.TXT"+CHR$(0)
  1812.              NewFile$="\SECONDDIR\MYFILE.TXT"+CHR$(0)
  1813.              CALL QRENAME(OldFile$,NewFile$)
  1814.              IF RC THEN
  1815.                 PRINT "File not moved"
  1816.              ELSE
  1817.                 PRINT "File moved"
  1818.              END IF
  1819.  
  1820.  
  1821.  
  1822.  
  1823.  
  1824.  
  1825.  
  1826.  
  1827.  
  1828.  
  1829.  
  1830.  
  1831.  
  1832.  
  1833.  
  1834.  
  1835.  
  1836.  
  1837.  
  1838.  
  1839.  
  1840.  
  1841.  
  1842.  
  1843.      QUICKBAS.LIB -- Version 1.0                                         25
  1844.  
  1845.  
  1846.  
  1847.  
  1848.  
  1849.  
  1850.  
  1851.  
  1852.      MISCELLANEOUS
  1853.  
  1854.  
  1855.  
  1856.      ALARM
  1857.  
  1858.  
  1859.      Produces a pulsating alarm tone.
  1860.  
  1861.         Example:
  1862.  
  1863.              CALL ALARM
  1864.  
  1865.  
  1866.  
  1867.      QCLOCK
  1868.  
  1869.  
  1870.      Display a running clock on the  screen.   This is a very nice touch on
  1871.      menu  and  update screens. The  clock can  be turned  on  and  off  by
  1872.      flipping  the  "switch" (1 =  on, 0 = off).  The  routine  can also be
  1873.      called again to move the location of the clock without having to first
  1874.      turn it off.
  1875.  
  1876.         Example:
  1877.  
  1878.              DEFINT A-Z
  1879.               .
  1880.              REM Turn the clock on
  1881.              Fgrd=5 : Bkgrd=7
  1882.              CALL QATTR(Fgrd,Bkgrd,NAttr)
  1883.              Row    = 2
  1884.              Col    = 70
  1885.              Switch = 1
  1886.              Page   = 0
  1887.              CALL QCLOCK(Row,Col,NAttr,Page,Switch)
  1888.               .
  1889.               .
  1890.               .
  1891.              REM Turn the clock off
  1892.              Switch = 0
  1893.              CALL QCLOCK(Row,Col,NAttr,Page,Switch)
  1894.  
  1895.  
  1896.  
  1897.  
  1898.  
  1899.  
  1900.  
  1901.  
  1902.  
  1903.  
  1904.  
  1905.  
  1906.  
  1907.  
  1908.  
  1909.      QUICKBAS.LIB -- Version 1.0                                         26
  1910.  
  1911.  
  1912.  
  1913.  
  1914.  
  1915.  
  1916.  
  1917.  
  1918.      QDOSVER
  1919.  
  1920.  
  1921.      Retrieve the  MS-DOS version.   The major  version is  returned in the
  1922.      first parm and the minor version in the second parm.
  1923.  
  1924.         Example:
  1925.  
  1926.              DEFINT A-Z
  1927.              CALL QDOSVER(Lparm,Rparm)
  1928.  
  1929.  
  1930.  
  1931.      PAUSE
  1932.  
  1933.  
  1934.      Pause  for a given  number of seconds.  It  uses  the system clock and
  1935.      will pause for the same amount of time regardless of the CPU used.
  1936.  
  1937.         Example:
  1938.  
  1939.              DEFINT A-Z
  1940.              Seconds = 15
  1941.              CALL PAUSE(Seconds)
  1942.  
  1943.  
  1944.  
  1945.      QWEEKDAY
  1946.  
  1947.  
  1948.      Returns a number indicating the current day of the week.
  1949.  
  1950.         Example:
  1951.  
  1952.              OPTION BASE 1
  1953.              DEFINT A-Z
  1954.              Days$ ="Sun Mon Tues Wednes Thurs Fri Satur"
  1955.               .
  1956.              CALL QWEEKDAY(Day)
  1957.              CALL QWORD(Days$,Day,Strt,Slen)
  1958.              Today$ = MID$(Days$,Strt,Slen)+"day"
  1959.              PRINT "Today is " Today$
  1960.  
  1961.  
  1962.  
  1963.  
  1964.  
  1965.  
  1966.  
  1967.  
  1968.  
  1969.  
  1970.  
  1971.  
  1972.  
  1973.  
  1974.  
  1975.      QUICKBAS.LIB -- Version 1.0                                         27
  1976.  
  1977.  
  1978.  
  1979.  
  1980.  
  1981.